package com.gopay.common.constants.dic;

/**
 * 
 * @SchemaCode.java
 * @author liujy
 * @2013-1-23 下午3:21:45 www.gopay.com.cn Inc.All rights reserved.
 */
public enum SchemaCode {

    /** 资产类：1021-结算备付金科目 */
    SCHEMA_CODE_1021("1021"), // 结算备付金

    /** 负债类：2202-应付账款 */
    SCHEMA_CODE_2202("2202"), // 应付账款
    /** 负债类：2241-差错账款 */
    SCHEMA_CODE_2241("2241"), // 差错账款
    /** 负债类：2002-保证金账户 */
    SCHEMA_CODE_2002("2002"), // 保证金账户
    /** 负债类：2801-预计负债 */
    SCHEMA_CODE_2801("2801"), // 包括：国付宝担保账户，红包中间账户，流量充值中间账户，话费充值中间账户，加油卡充值中间账户
    /** 负债类：2802-预计负债 */
    SCHEMA_CODE_2802("2802"), // 包括：国付宝口令红包中间账号群
    /** 负债类：2011-客户账户 */
    SCHEMA_CODE_2011("2011"), // 客户账户

    /** 收益：6021-手续费收益 */
    SCHEMA_CODE_6021("6021"),// 手续费收益
    
    /** 负债类：2314-代理业务负债 */

    SCHEMA_CODE_2314("2314"),// 增值服务分账账户
	
	/** 2221-邮电费 */
    SCHEMA_CODE_2221("2221"),// 邮电费
    
	
	/**损益类：6022-中间账户*/
    SCHEMA_CODE_6022("6022"),// 包括：手续费计提中间账户

    //---------start boai 16/6/23----- 
    /** 负债类：2315-代理业务负债 */
    SCHEMA_CODE_2315("2315"),// 手机钱包快捷支付中间账户，跨境、留学汇款支付中间账户
    //---------end--------------------
    SCHEMA_CODE_2316("2316");   //收款分账中间账户
	
    public final String value;

    private SchemaCode(String value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return this.value;
    }

    /**
     * 根据枚举类型的字符串值 获取 相应的枚举变量
     */
    public static SchemaCode get(String str) {
        SchemaCode[] cs = SchemaCode.class.getEnumConstants();
        for (SchemaCode c : cs) {
            if (c.value.equals(str)){
                return c;
            }
        }
        throw new RuntimeException(" wrong " + SchemaCode.class.getSimpleName() + " string value! " + str);
    }

    /**
     * <pre>
     * 资产类账户的C类账务是减余额，D类账务是加余额；<----反向
     * 负债类账户的C类账务是加余额，D类账务是减余额；<----正向
     * 收益类账户的C类账务是加余额，D类账务是减余额；<----正向
     * 
     * 这里用 正向 表示 收益类和负债类账户的余额加减方向；
     * </pre>
     */
    public boolean isPositive() {
        // 只有资产类是反向，其他都是正向
        if (this.equals(SCHEMA_CODE_1021)) {
            return false;
        }
        return true;
    }
}
